package com.solocredit.finance.utils.helper

import android.content.Context
import android.view.View
import com.solocredit.finance.app.MyApp
import com.solocredit.finance.config.MullaConfigs
import com.solocredit.finance.http.HttpHelper
import com.solocredit.finance.utils.DateUtils
import com.solocredit.finance.utils.dialog.SignRiseDialog
import com.solocredit.finance.utils.event.MullaEventData
import com.solocredit.finance.utils.event.MullaEventType
import org.json.JSONArray
import org.json.JSONObject
import java.math.BigDecimal

/**
 * 签到提额逻辑
 */
object MullaSignRiseHelper {

    /**
     * TODO: 2025/05/26-2025/05/30 赞比亚更新新需求，增加签到提额逻辑
     */
    fun onMullaHandleSignRiseData(context: Context?){
        //主产品
        var mainProduct: JSONObject? = null
        val pData = SharedHelper.getMullaSPString(SharedHelper.MULLA_SPKEY.MULLA_PRODCTS)
        if (pData.isNotEmpty()) {
            val objArray = JSONArray(pData)
            for (i in 0..<objArray.length()) {
                val item = objArray.optJSONObject(i)
                if (item.optString("product") == MullaConfigs.MULLA_APPNAME){
                    mainProduct = item
                    break
                }
            }
        }

        /**
         * 主产品  -> 待还款 -> 提额逻辑
         *        -> 可申贷 -> 累计签到天数 != 0 -> 提额逻辑
         */
        mainProduct?.let { item ->
            //主产品不存在 提额百分比 字段，则不需要判断提额
            if (!item.has("dailyIncrease")){
                return
            }

            //主产品不存在 最近一笔结清订单额度 字段，则不需要判断提额
            if (!item.has("lastSettleOrderAmount")){
                return
            }

            //签到提额 上次签到时间戳
            val signRiseLastTimeStamp = MullaCustomDataHelper.getMullaCustomSignRiseLastTimeStamp()
            //上次签到时间是今天，则不需要判断提额
            if (DateUtils.IsToday(signRiseLastTimeStamp * 1000)){
                //签到提额 已提示
                return
            }

            //签到提额 提额百分比数组
            val dailyIncrease = item.optJSONArray("dailyIncrease")
            dailyIncrease?.let { array ->
                //签到提额 累计签到天数
                val signRiseDays = MullaCustomDataHelper.getMullaCustomSignRiseDays()
                if (signRiseDays >= array.length()){
                    //签到天数 大于等于 提额百分比数量 不提示
                    return
                }

                val showItem = insertMullaFlowSignRiseDataToProductItem(item)
                //需要提示签到提额
                if (showItem.optBoolean("showSignRise",false)){
                    showMullaSignRiseDialog(context,showItem)
                }

//                //产品当前状态
//                val status = item.optString("status")
//                when(status){
//                    "REPAYMENT" -> {//待还款
//                        item.put("showSignRise",true)
//                    }
//                    "APPLY" -> {//可申请
//                        if (signRiseDays != 0){//可继续提示签到提额
//                            item.put("showSignRise",true)
//
//                        }
//                    }
//                }
//
//                //需要提示签到提额
//                if (item.optBoolean("showSignRise",false)){
//                    //当前提额比例
//                    val curtScale = array.optInt(signRiseDays)
//                    //下一次提额比例
//                    var nextScale = curtScale
//                    if (signRiseDays + 1 <= array.length() - 1){
//                        nextScale = array.optInt(signRiseDays + 1)
//                    }
//                    //最近一笔结清订单额度
//                    val lastOrderAmount = item.optLong("lastSettleOrderAmount")
//
//                    //提额后额度
//                    val showAmount = BigDecimal("$lastOrderAmount").add(BigDecimal("$lastOrderAmount").multiply(BigDecimal("$curtScale").divide(BigDecimal("100")))).stripTrailingZeros().toPlainString()
//                    item.put("signRiseAmount",showAmount)
//                    //下次签到额度
//                    if (nextScale == curtScale){
//                        item.put("nextSignRiseAmount","")
//                    } else {
//                        val nextAmount = BigDecimal("$lastOrderAmount").add(BigDecimal("$lastOrderAmount").multiply(BigDecimal("$nextScale").divide(BigDecimal("100")))).stripTrailingZeros().toPlainString()
//                        item.put("nextSignRiseAmount",nextAmount)
//                    }
//                    showMullaSignRiseDialog(context,item)
//                }
            }
        }
    }

    /**
     * 添加签到提额相关信息到产品Item
     */
    fun insertMullaFlowSignRiseDataToProductItem(item: JSONObject): JSONObject{
        item.put("showSignRise",false)
        if (!item.has("dailyIncrease")){
            return item
        }
        if (!item.has("lastSettleOrderAmount")){
            return item
        }

        //签到提额 提额百分比数组
        val dailyIncrease = item.optJSONArray("dailyIncrease")
        dailyIncrease?.let { array ->
            //签到提额 累计签到天数
            val signRiseDays = MullaCustomDataHelper.getMullaCustomSignRiseDays()
            if (signRiseDays >= array.length()) {
                //签到天数 大于等于 提额百分比数量 不提示
                return item
            }

            //产品当前状态
            val status = item.optString("status")
            when(status){
                "REPAYMENT" -> {//待还款
                    item.put("showSignRise",true)
                }
                "APPLY" -> {//可申请
                    if (signRiseDays != 0){//可继续提示签到提额
                        item.put("showSignRise",true)

                    }
                }
            }

            //需要提示签到提额
            if (item.optBoolean("showSignRise",false)){
                //当前提额比例
                val curtScale = array.optInt(signRiseDays)
                //下一次提额比例
                var nextScale = curtScale
                if (signRiseDays + 1 <= array.length() - 1){
                    nextScale = array.optInt(signRiseDays + 1)
                }
                //最近一笔结清订单额度
                val lastOrderAmount = item.optLong("lastSettleOrderAmount")

                //提额后额度
                val showAmount = BigDecimal("$lastOrderAmount").add(BigDecimal("$lastOrderAmount").multiply(BigDecimal("$curtScale").divide(BigDecimal("100")))).stripTrailingZeros().toPlainString()
                item.put("signRiseAmount",showAmount)
                //下次签到额度
                if (nextScale == curtScale){
                    item.put("nextSignRiseAmount","")
                } else {
                    val nextAmount = BigDecimal("$lastOrderAmount").add(BigDecimal("$lastOrderAmount").multiply(BigDecimal("$nextScale").divide(BigDecimal("100")))).stripTrailingZeros().toPlainString()
                    item.put("nextSignRiseAmount",nextAmount)
                }
            }
        }
        return item
    }

    /**
     * 根据签到天数 和 提额比例 计算产品列表当前展示的额度
     */
    fun takeMullaFlowShowSignRiseAmount(item: JSONObject): JSONObject{
        item.put("showSignRise",false)
        if (!item.has("dailyIncrease")){
            return item
        }
        if (!item.has("lastSettleOrderAmount")){
            return item
        }

        //签到提额 提额百分比数组
        val dailyIncrease = item.optJSONArray("dailyIncrease")
        dailyIncrease?.let { array ->
            //签到提额 累计签到天数
            val signRiseDays = MullaCustomDataHelper.getMullaCustomSignRiseDays()
            if (signRiseDays > array.length() || signRiseDays <= 0) {
                //签到天数 大于等于 提额百分比数量
                return item
            }

            //产品当前状态
            val status = item.optString("status")
            when(status){
                "REPAYMENT" -> {//待还款
                    item.put("showSignRise",true)
                }
                "APPLY" -> {//可申请
                    item.put("showSignRise",true)
                }
            }

            //需要提示签到提额
            if (item.optBoolean("showSignRise",false)){
                //当前提额比例
                val curtScale = array.optInt(signRiseDays-1)
                //最近一笔结清订单额度
                val lastOrderAmount = item.optLong("lastSettleOrderAmount")

                //提额后额度
                val showAmount = BigDecimal("$lastOrderAmount").add(BigDecimal("$lastOrderAmount").multiply(BigDecimal("$curtScale").divide(BigDecimal("100")))).stripTrailingZeros().toPlainString()
                item.put("signRiseAmount",showAmount)
            }
        }
        return item
    }

    /**
     * 签到提额dialog
     */
    private fun showMullaSignRiseDialog(context: Context?,data: JSONObject){
        context?.let {
            //签到提额 累计签到天数
            val signRiseDays = MullaCustomDataHelper.getMullaCustomSignRiseDays()
            //保存累计签到天数和上次签到时间
            MullaCustomDataHelper.saveMullaCustomSignRiseLastTimeStampAndDays(signRiseDays+1,"${System.currentTimeMillis() / 1000}")
            HttpHelper.addMullaEventAction(MullaEventType.FORM.MULLA_FORM_SIGN_RISE_DAYS,"${signRiseDays+1}")
            val signRiseDialog = SignRiseDialog(it,object : SignRiseDialog.IDialogCallback{
                override fun onClick(view: View?) {
                }
                override fun onDismiss() {
                    //需要刷新产品列表
                    MyApp.app.publisher.publish(MullaEventData(MullaEventData.TYPE.MULLA_PRODUCT_REFRESH))
                }
            })
            signRiseDialog.setCancelable(true)
            signRiseDialog.setCanceledOnTouchOutside(false)
            signRiseDialog.show()
            signRiseDialog.showMullaSignRiseInfo(data)
        }
    }
}